import axios from 'axios';
import router from '../router';
// 设置基础URL

axios.defaults.baseURL = '/api'
// axios.defaults.baseURL = 'https://www.hephaestuses.com';
axios.defaults.timeout = 15000;
axios.defaults.headers.common['Content-Type'] = 'application/json';
axios.defaults.headers.common['Accept'] = '*/*';
// 请求拦截器
axios.interceptors.request.use(
    config => {
        // 从 localStorage 获取 token
        const token = localStorage.getItem('auth-token');

        // 如果 token 存在，则添加到请求头
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`;
        }

        return config;
    },
    error => {
        console.error('请求错误:', error);
        return Promise.reject(error);
    }
);

// 响应拦截器
axios.interceptors.response.use(
    // 处理响应数据
    response => {
        const res = response.data;

        // 如果返回的状态码不是200，说明接口请求有问题
        if (res.code !== 200) {
            // 根据不同的错误码处理不同的错误
            if (res.code === 401 || res.code === 403) {
                // 未授权或禁止访问，清除token并跳转到登录页面
                localStorage.removeItem('auth-token');
                localStorage.removeItem('user-info');

                // 使用 window.location 重定向到登录页面
                router.push({ path: '/auth/login' })
            }

            // 返回错误信息
            return Promise.reject(new Error(res.message || '未知错误'));
        } else {
            // 返回正常数据
            return res;
        }
    },
    // 处理响应错误
    error => {
        console.error('响应错误:', error);

        // 处理网络错误
        if (!error.response) {
            return Promise.reject(new Error('网络错误，请检查您的网络连接'));
        }

        // 处理 HTTP 状态码错误
        const status = error.response.status;

        if (status === 401) {
            // 未授权，清除token并跳转到登录页面
            localStorage.removeItem('auth-token');
            localStorage.removeItem('user-info');
            router.push({ path: '/auth/login' })
            return Promise.reject(new Error('登录已过期，请重新登录'));
        } else if (status === 403) {
            return Promise.reject(new Error('没有权限访问该资源'));
        } else if (status === 404) {
            return Promise.reject(new Error('请求的资源不存在'));
        } else if (status === 500) {
            return Promise.reject(new Error('服务器内部错误'));
        } else {
            return Promise.reject(new Error(error.response.data.message || `请求失败(${status})`));
        }
    }
);

// 封装请求方法
export default {
    get(url, params = {}) {
        return axios.get(url, { params });
    },
    post(url, data = {}) {
        return axios.post(url, data);
    },
    put(url, data = {}) {
        return axios.put(url, data);
    },
    delete(url, data= {}) {
        return axios.delete(url, data);
    },
    upload(url, data = {}) {
        return axios.post(url, data, {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        });
    }
};
